package br.com.tcf.ManegedBeans;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.tcf.dao.DiaSemanaDao;
import br.com.tcf.dao.ProdutoDao;
import br.com.tcf.dao.PromocaoDao;
import br.com.tcf.entidades.DiaSemana;
import br.com.tcf.entidades.Produto;
import br.com.tcf.entidades.ProdutoPromocao;
import br.com.tcf.entidades.Promocao;

@ManagedBean(name="promocaoMB")
@ViewScoped
public class PromocaoMB {
	private Promocao promo = new Promocao();
	private Promocao promoSelecionada = new Promocao();
	private List<Promocao> promos;
	private PromocaoDao promodao = new PromocaoDao();
	
	private ProdutoPromocao prodPromo = new ProdutoPromocao();
	private ProdutoPromocao pordPromoSelecionado = new ProdutoPromocao();
	private List<ProdutoPromocao> produtosPromocao = new ArrayList<ProdutoPromocao>();

	private Produto produto = new Produto();
	private List<Produto> produtosLista = new ArrayList<Produto>();
	private ProdutoDao proddao = new ProdutoDao();
	
	private List<DiaSemana> dias = new ArrayList<DiaSemana>();
	private List<DiaSemana> dias_selecionados = new ArrayList<DiaSemana>();
	private DiaSemanaDao diaSemanaDao = new DiaSemanaDao();
	
	private String vl_promo;
	private String vl_promocional;
	
	private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
	private String dt_inicial;
	private String dt_final;

	@ManagedProperty(value="#{controlaAcessoMB}")
	ControlaAcessoMB controlaAcessoMB;

	@PostConstruct
	public void ini(){
		lista_promocoes_ativas();
		carregaProdutos();
		
		dias = diaSemanaDao.buscaDiaSemana();
	}

	public void lista_promocoes_por_empresa(){
		promos = new ArrayList<Promocao>();
		promos = promodao.listar_promocoes(controlaAcessoMB.getUsuario().getEmpresa());
	}

	public void lista_promocoes_ativas(){
		promos = new ArrayList<Promocao>();
		promos = promodao.listar_promocoes_ativas(controlaAcessoMB.getUsuario().getEmpresa());
	}

	public void lista_promocoes_a_iniciar(){
		promos = new ArrayList<Promocao>();
		promos = promodao.listar_promocoes_a_iniciar(controlaAcessoMB.getUsuario().getEmpresa());
	}

	public void lista_promocoes_finalizadas(){
		promos = new ArrayList<Promocao>();
		promos = promodao.listar_promocoes_finalizadas(controlaAcessoMB.getUsuario().getEmpresa());
	}


	public void finalizarPromo(){
		try {
			promoSelecionada.setData_final(new java.sql.Date (sdf.parse(sdf.format(new java.util.Date())).getTime()));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		promodao.grava_promocao(promoSelecionada);
		promoSelecionada = new Promocao();
		lista_promocoes_finalizadas();
	}

	public void gravaPromo(){
		promo.setVl_promocao(Double.parseDouble(vl_promo));
		promo.setEmpresa(controlaAcessoMB.getUsuario().getEmpresa());
		promo.setDiasSemana(dias_selecionados);
		promodao.grava_promocao(promo);
		promo = new Promocao();
		vl_promo = null;
		lista_promocoes_ativas();
		//metodo para atualizar pagina fora do dialog
	
	}

	public void alteraPromo(){
		promoSelecionada.setVl_promocao(Double.parseDouble(vl_promo));
		promoSelecionada.setEmpresa(controlaAcessoMB.getUsuario().getEmpresa());
		promodao.grava_promocao(promoSelecionada);
		promoSelecionada = new Promocao();
		vl_promo = null;
		lista_promocoes_por_empresa();
		//metodo para atualizar pagina fora do dialog
	
	}
	
	public void produtosDaPromocao(){
		produtosPromocao = promodao.listar_produtos_por_promocao(promoSelecionada);
	}

	public void selectRow(){
		vl_promo = promoSelecionada.getVl_promocao().toString();
		produtosDaPromocao();
	}

	public void vincularProduto(){
		prodPromo.setPromocao(promoSelecionada);
		prodPromo.setProduto(produto);
		prodPromo.setVl_promocional(Double.parseDouble(vl_promocional));
		promodao.vincularProdutoPromocao(prodPromo);
		if(promoSelecionada.isSn_exclusiva()==false){
		promoSelecionada.setVl_promocao(promodao.somarProdutos(promoSelecionada));
		promodao.grava_promocao(promoSelecionada);
		
		}
		prodPromo = new ProdutoPromocao();
		produto = new Produto();
		vl_promocional = null;
		produtosDaPromocao();
		lista_promocoes_ativas();
	}
	
	public void desvincularProduto(){
		promodao.desvincularProdutoPromocao(pordPromoSelecionado);
		if(promoSelecionada.isSn_exclusiva()==false){
			promoSelecionada.setVl_promocao(promodao.somarProdutos(promoSelecionada));
			promodao.grava_promocao(promoSelecionada);
			
		}
		pordPromoSelecionado = new ProdutoPromocao();
		produtosDaPromocao();
		vl_promocional = null;
		lista_promocoes_ativas();	
		
	}
	
	public void mostraProduto(){
		//System.out.println("Produto Selecionado: "+produto.getNm_produto());
		vl_promo = null;
		
	}	

	public void carregaProdutos(){
		produtosLista = new ArrayList<Produto>();
		produtosLista = proddao.listar_produto_por_empresa(controlaAcessoMB.getUsuario().getEmpresa().getCardapio());
	}
	
	//Getters And Setters
	public Promocao getPromo() {
		return promo;
	}
	public void setPromo(Promocao promo) {
		this.promo = promo;
	}
	public List<Promocao> getPromos() {
		return promos;
	}
	public Produto getProduto() {
		return produto;
	}
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	public void setPromos(List<Promocao> promos) {
		this.promos = promos;
	}
	public String getVl_promocional() {
		return vl_promocional;
	}
	public void setVl_promocional(String vl_promocional) {
		this.vl_promocional = vl_promocional;
	}
	public String getDt_inicial() {
		return dt_inicial;
	}
	public void setDt_inicial(String dt_inicial) {
		this.dt_inicial = dt_inicial;
	}
	public String getDt_final() {
		return dt_final;
	}

	public void setDt_final(String dt_final) {
		this.dt_final = dt_final;
	}
	public Promocao getPromoSelecionada() {
		return promoSelecionada;
	}
	public void setPromoSelecionada(Promocao promoSelecionada) {
		this.promoSelecionada = promoSelecionada;
	}
	public ProdutoPromocao getPordPromoSelecionado() {
		return pordPromoSelecionado;
	}
	public void setPordPromoSelecionado(ProdutoPromocao pordPromoSelecionado) {
		this.pordPromoSelecionado = pordPromoSelecionado;
	}
	public ControlaAcessoMB getControlaAcessoMB() {
		return controlaAcessoMB;
	}
	public List<Produto> getProdutosLista() {
		return produtosLista;
	}
	public void setProdutosLista(List<Produto> produtosLista) {
		this.produtosLista = produtosLista;
	}
	public void setControlaAcessoMB(ControlaAcessoMB controlaAcessoMB) {
		this.controlaAcessoMB = controlaAcessoMB;
	}
	public String getVl_promo() {
		return vl_promo;
	}
	public void setVl_promo(String vl_promo) {
		this.vl_promo = vl_promo;
	}
	public List<ProdutoPromocao> getProdutosPromocao() {
		return produtosPromocao;
	}
	public void setProdutosPromocao(List<ProdutoPromocao> produtosPromocao) {
		this.produtosPromocao = produtosPromocao;
	}
	public List<DiaSemana> getDias() {
		return dias;
	}
	public void setDias(List<DiaSemana> dias) {
		this.dias = dias;
	}
	public List<DiaSemana> getDias_selecionados() {
		return dias_selecionados;
	}
	public void setDias_selecionados(List<DiaSemana> dias_selecionados) {
		this.dias_selecionados = dias_selecionados;
	}
}
